package com.atguigu.netty.codec1;

import io.netty.buffer.Unpooled;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelInboundHandlerAdapter;
import io.netty.channel.SimpleChannelInboundHandler;
import io.netty.util.CharsetUtil;

import java.util.concurrent.TimeUnit;

/**
 * @author: 叶子
 * @date: 2022/02/08 11:25
 * 自定义一个handler 需要继承netty规定好的某个HandlerAdapter
 * 此时自定义的handler才能称为handler
 * 用文档注释的是另外一种方式
 **/
/** --public class NettyServerHandler extends ChannelInboundHandlerAdapter {*/
public class NettyServerHandler extends SimpleChannelInboundHandler<StudentPOJO.Student> {
//    读取数据事件（这里可以读取客户端发送的消息）

    /**
     * 1.ChannelHandlerContext ctx:上下文对象，含有管道pipeline，通道channel，地址
     * 2.Object msg: 客户端发送的数据，默认Object
     */
    /**
    @Override
    public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
            //读取从客户端发送的StudentPOJO。Student
        StudentPOJO.Student student = (StudentPOJO.Student) msg;
        System.out.println("客户端发送的数据 id="+student.getId()+" 名字="+student.getName());
    }
    */
    @Override
    protected void channelRead0(ChannelHandlerContext ctx, StudentPOJO.Student msg) throws Exception {
        System.out.println("客户端发送的数据 id="+msg.getId() +" 名字="+msg.getName());
    }
    //    数据读取完毕
    @Override
    public void channelReadComplete(ChannelHandlerContext ctx) throws Exception {
        //writeAndFlush是write+flush，将数据写入缓存，并刷新
//      通常需要对这个发送的数据进行编码
        ctx.writeAndFlush(Unpooled.copiedBuffer("hello,客户端...喵1", CharsetUtil.UTF_8));
    }
//    处理异常，一般是需要关闭通道

    @Override
    public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
        ctx.close();
    }


}